본문으로 건너뛰기

연관된 상태의 단순화와 객체화

연관된 상태의 단순화

React를 사용하여 애플리케이션을 개발할 때, 컴포넌트의 상태 관리는 매우 중요한 부분입니다. 상태를 적절하게 관리하면 코드의 가독성과 유지보수성이 크게 향상됩니다. 연관된 상태를 단순화하는 방법을 이해하기 위해, 먼저 여러 개의 상태를 관리하는 예시를 살펴보겠습니다.

import React, { useState } from 'react';

function UserProfile() {
const [firstName, setFirstName] = useState('');
const [lastName, setLastName] = useState('');
const [email, setEmail] = useState('');

return (
<div>
<input
type="text"
value={firstName}
onChange={(e) => setFirstName(e.target.value)}
placeholder="First Name"
/>
<input
type="text"
value={lastName}
onChange={(e) => setLastName(e.target.value)}
placeholder="Last Name"
/>
<input
type="email"
value={email}
onChange={(e) => setEmail(e.target.value)}
placeholder="Email"
/>
</div>
);
}

위의 코드는 세 개의 상태를 각각 관리하고 있습니다. 이처럼 개별 상태가 많아지면 코드가 복잡해지고, 상태 업데이트 로직이 분산되어 관리하기 어려워집니다. 이를 해결하기 위해 연관된 상태를 하나의 객체로 단순화할 수 있습니다.

상태 객체화

상태를 객체화하면 여러 상태를 하나의 객체로 관리할 수 있어, 코드가 더 직관적이고 관리하기 쉬워집니다. 위의 예시를 객체화하여 개선해 보겠습니다.

import React, { useState } from 'react';

function UserProfile() {
const [userInfo, setUserInfo] = useState({
firstName: '',
lastName: '',
email: ''
});

const handleChange = (e) => {
const { name, value } = e.target;
setUserInfo((prevUserInfo) => ({
...prevUserInfo,
[name]: value
}));
};

return (
<div>
<input
type="text"
name="firstName"
value={userInfo.firstName}
onChange={handleChange}
placeholder="First Name"
/>
<input
type="text"
name="lastName"
value={userInfo.lastName}
onChange={handleChange}
placeholder="Last Name"
/>
<input
type="email"
name="email"
value={userInfo.email}
onChange={handleChange}
placeholder="Email"
/>
</div>
);
}

이제 userInfo라는 객체 하나로 상태를 관리하여 코드가 훨씬 간결해졌습니다. handleChange 함수는 모든 입력 필드에서 상태를 업데이트하는 데 사용됩니다. 이렇게 하면 상태 관리가 단순해지고, 새로운 입력 필드를 추가할 때도 더 쉽게 확장할 수 있습니다.

주의해야 할 점

상태를 객체로 관리할 때 주의할 점은 다음과 같습니다:

  • 불변성 유지: 상태를 업데이트할 때는 항상 이전 상태를 복사하여 새로운 상태를 만들어야 합니다. 이를 위해 전개 연산자(...)를 사용합니다.
  • 깊은 복사: 객체가 중첩된 구조를 가지고 있는 경우, 얕은 복사로는 충분하지 않을 수 있습니다. 이때는 깊은 복사를 고려해야 합니다.
  • 리렌더링 최적화: 상태 객체의 특정 속성이 변경될 때마다 컴포넌트가 리렌더링되는 것을 방지하기 위해, 필요한 경우 메모이제이션을 사용합니다.

더 알아보기

  • React 상태 관리: React 공식 문서에서 상태 관리에 대해 더 알아보세요.
  • 불변성 유지: JavaScript의 불변성에 대한 이해를 높이기 위해 Immutable.js를 살펴보세요.
  • 리렌더링 최적화: React.memo와 같은 리렌더링 최적화 기법을 배워보세요.

내용 요약과 다음 주제

연관된 상태를 단순화하고 객체화하면 상태 관리를 더욱 직관적이고 효율적으로 할 수 있습니다. 이는 코드의 가독성을 높이고 유지보수를 쉽게 만들어 줍니다. 다음 주제인 useRef 소개와 useState 대신 컴포넌트 변수 생성에서는 useRef를 사용하여 상태 관리를 더욱 효과적으로 하는 방법을 배워보겠습니다.